An “accumulator” interface control (also known as a “dual list” or “list builder”) is a user interface component that allows movement of items from a first list to a second list, such that items moved to the second list are selected or deselected. Such interface controls are typically used in environments where there is a need to include or exclude particular items from a data set. However, when such interface controls are used to access large data sets, a significant performance impact is observed due to the need to load the entire data set into memory for display within the interface control. For example, attempting to provide a list of thousands of database records within a single selection window of the interface control may cause the interface control to become inoperable for a lengthy period of time while the thousands of records are requested from the database, transmitted to the interface control, and loaded in memory to build the list of items displayed in the selection window.
The problem of requesting and displaying large numbers of records without impacting performance has been dealt with in some contexts through the use of an “infinite scroll” design pattern. Interfaces designed according to this pattern frequently implement functionality that retrieves sets of records in a piecemeal manner, such that only a small subset of a large number of records is requested for loading into an interface at any given time. However, while such functionality may be straightforward to implement in, for example, a web page with a process that posts a “scroll” event in response to the user reaching the end of a list of items within the interface, such techniques are inadequate in the context of an accumulator, which maintains simultaneous lists of both selected items and items available for selection. Attempting to implement such a design pattern in an accumulator often results in a lengthy, unwieldy query being developed for one or both lists of items as individual items are selected and corresponding query language constructed. Implementation of an infinitely scrolling list in an accumulator also requires fetching of a dataset beforehand, causing the data displayed within the accumulator to not necessarily reflect the freshest data from the database. The piecemeal access and display of results also limits the ability to include/exclude all items from the list since not all items are necessarily loaded for selection at any given time.
Through applied effort, ingenuity, and innovation, Applicant has solved many of these identified problems by developing a technical solution that is embodied by the present invention, which is described in detail below.